import reversi.GameState;
import reversi.Move;


public class Fronteira extends Estrategia{
	



	public Fronteira(double pesoComeco, double pesoMeio, double pesoFim,
			double escala) {
		super(pesoComeco, pesoMeio, pesoFim, escala);
	}

	public boolean isDiscoDeFronteira(int x, int y, GameState estado){
		//Nao ha disco nesta posicao
		if((estado.getMarkAt(x, y)==-1)) return false;
		if(x==0||y==0||x==7||y==7)return false;
		
		if((estado.getMarkAt(x-1, y-1)!=-1)&&
			(estado.getMarkAt(x, y-1)!=-1) &&
			(estado.getMarkAt(x+1, y-1)!=-1) &&
			(estado.getMarkAt(x-1, y)!=-1) &&
			(estado.getMarkAt(x+1, y)!=-1) &&
			(estado.getMarkAt(x-1, y+1)!=-1) &&
			(estado.getMarkAt(x, y+1)!=-1) &&
			(estado.getMarkAt(x+1, y+1)!=-1) ) return false;
			
		return true;
	}

	@Override
	public int avaliaEstado(GameState estado, int indiceJogador, Move movimento) {
		int avaliacao = 0;
		for(int i = 0; i<estado.getWidth(); i++)
			for(int j = (int) 0; j<estado.getHeight(); j++){
				if(isDiscoDeFronteira(i, j, estado)){
					if(estado.getMarkAt(i, j)==indiceJogador)
						avaliacao--;
					if(estado.getMarkAt(i, j)==getIndiceAdversario(indiceJogador))
						avaliacao++;
				}
			}
		return avaliacao;
	}
	
	

}
